Introduction


Problem 1
Create a project called FriendList as shown. Insert a textbox called tbxOutput with the properties: read only and multiline. Insert a button called btInsert with the property: default button.
Cree un proyecto llamado FriendList como se muestra. Inserte una caja de texto llamada tbxOutput con las propiedades de: solo lectura y multi-línea. Inserte un botón llamado btInsert con la propiedad de botón de defecto.

FriendList.h
#pragma once //______________________________________ FriendList.h
#include "resource.h"
class FriendList: public Win::Dialog
{
public:
     FriendList()
     {
     }
     ~FriendList()
     {
     }
     list<wstring> nameList;
protected:
     . . .
};

FriendList.cpp
void FriendList::Window_Open(Win::Event& e)
{
}

void FriendList::btAdd_Click(Win::Event& e)
{
     //____________________________ Insert the name in the list
     nameList.push_back(tbxName.Text);
     //____________________________ Insert the name in the textbox
     tbxInput.Text += tbxName.Text;
     tbxInput.Text += L"\r\n";
     //____________________________Clear the textbox and set the focus
     tbxName.Text = L"";
     tbxName.SetFocus();
}

void FriendList::btSort_Click(Win::Event& e)
{
     nameList.sort();
     //__________________________ Display the sorted names
     tbxOutput.Text = L"";
     const list<wstring>::iterator listEnd = nameList.end();
     for(list<wstring>::iterator names = nameList.begin(); names != listEnd; names++)
     {
          tbxOutput.Text += *names; //The asterisk is the content of the list
          tbxOutput.Text += L"\r\n";
     }
}

FriendList

Text Length

The number of characters in a variable of the type wstring can be calculated using the function variable.size() or variable.length(). On the other hand, the number of character of a variable of the type wchar_t is computed using the function wcslen(variable). Both functions returns an integer value. See the code below.
El número de caracteres en una variable del tipo wstring se puede calcular usando la función variable.size() o variable.length(). Por otro lado, el número de caracteres de una variable del tipo wchar_t se calcula usando la función wcslen(variable). Ambas funciones regresan un valor entero. Vea el código de abajo.

Program.h
void Program::Window_Open(Win::Event& e)
{
     wstring name = L"Mary";
     int nameLength = name.size();
     //
     wchar_t nombre[] = L"Roberto";
     int nombreLen = wcslen(nombre);
}

Text Array

A wchar_t or wstring variable is an array or characters. Each character can be accessed using the operator[] as show below. wstring also supports the operator[].
Una variable wchar_t o wstring en un arreglo de letras. Cada letra puede ser accesada usando el operador[] como se muestra debajo. wstring también implementa el operador [].

Program.h
void Program::Window_Open(Win::Event& e)
{
     wstring name = L"Mary";
     if (name[0] == 'M')
     {
          // The first letter of name is M
     }
     //
     wchar_t nombre[] = L"Roberto";
     if (nombre[1] == 'o')
     {
          // The second letter of nombre is o
     }
}

Tip
There are many functions that work with wchar_t. To use these functions, it is possible to momentarily convert a variable of the type wstring to a variable of the type wchar_t as shown in the example below. The program creates a variable of the type wstring to store the word Mary; the function wcslen expects a wchar_t variable. The first code does not compile because the function expects a variable of the type wchar_t. In the second example, the function variable.c_str() converts the variable so that the code can compile.
Hay muchas funciones que trabajarn con wchar_t. Para usar estas funciones, es posible convertir momentáneamente una variable del tipo wstring a una variable del tipo wchar_t como se muestra en el ejemplo de abajo. El programa crea una variable del tipo wstring para almacenar la palabra Mary; la función wcslen espera una variable del tipo wchar_t. El primer código no compila porque la función espera una variable del tipo wchar_t. En el segundo ejemplo, la función variable.c_str() convierte la variable de tal forma que el código compile.

Program.h
void Program::Window_Open(Win::Event& e)
{
     wstring name = L"Mary";
     int nombreLen = (int)wcslen(name); // IT DOES NOT COMPILE
}


Program.cpp
void Program::Window_Open(Win::Event& e)
{
     wstring name = L"Mary";
     int nombreLen = (int)wcslen(name.c_str());
}


Problem 2
Create a project called NameLen as shown to compute the length of a name using the functions length() of a variable wstring, and the funciton wcslen with a variable of the type wchar_t.
Cree un proyecto llamado NameLen como se muestra para calcular la longitud de un nombre usando la función length() de una variable wstring, y wcslen con una variable del tipo wchar_t.

NameLen

NameLen.cpp
void NameLen::Window_Open(Win::Event& e)
{
}

void NameLen::btCalculate_Click(Win::Event& e)
{
     this->tbxWtringLen.IntValue = tbxName.Text.length();
     this->tbxWchartLen.IntValue =wcslen(tbxName.Text.c_str());
}


Problem 3
Create a project called CountText that counts the number of characters "a" that a sentence have.
Cree un proyecto llamado CountText para contar el número de letras "a" que una frase tiene.

CountText

CountText.cpp
void CountText::Window_Open(Win::Event& e)
{
}

void CountText::btCalculate_Click(Win::Event& e)
{
     wstring input = tbxInput.Text;
     const int len = input.length();
     int count = 0;
     for(int i = 0; i < len; i++)
     {
          if (input[i] == 'a') count++;
     }
     tbxCount.IntValue = count;
}

Problem 4
Create a project called WeekDay that takes a number or the first letter of a day of the week and returns the full name of the day (sunday is zero). If the name of two days stars with the same letter, use the second letter instead of the first one in one of the days.
Cree un proyecto llamado WeekDay que tome un número o la primera letra de un día de la semana y regrese el nombre completo del día (el domingo es cero). Si el nombre de dos días comienza con la misma letra, use la segunda letra en lugar de la primera en uno de los días.

WeekDay1

WeekDay2

WeekDay.h
#pragma once //______________________________________ WeekDay.h
#include "resource.h"

class WeekDay: public Win::Dialog
{
public:
     WeekDay()
     {
     }
     ~WeekDay()
     {
     }
     const wchar_t* GetDayNameByChar(wchar_t input);
     const wchar_t* GetDayNameByNumb(int input);
     . . .
};

WeekDay.cpp
void WeekDay::Window_Open(Win::Event& e)
{
     this->radioNumber.Checked = true;
}

void WeekDay::btCalculate_Click(Win::Event& e)
{
     if (radioNumber.Checked == true)
     {
          tbxOutput.Text = GetDayNameByNumb(...);
     }
     else
     {
          wstring input = tbxInput.Text;
          if (input.length() == 1)
          {
               tbxOutput.Text = GetDayNameByChar(input[0]);
          }
     }
}

const wchar_t* WeekDay::GetDayNameByChar(wchar_t input)
{
     switch(input)
     {
     case L'S': return L"Sunday";
     . . .
}

const wchar_t* WeekDay::GetDayNameByNumb(int input)
{
     switch(input)
     {
     case 0: return L"Sunday";
     . . .
}


Problem 5
Create a project called TagView that extracts the text inside tags (i.e., <message>), and ignores the text outside the tags. Use a Textbox to input the text, and a List Box to show the tags. Cree a class called TagReader to implement your program. Use the change event in the input textbox.
Cree un proyecto llamado TagView que extraiga el texto dentro de etiquetas (por ejemplo: <message>), e ignore el texto fuera de las etiquetas. Use una caja de texto para ingresar el texto, y una List Box para mostrar las etiquetas. Cree una clase llamada TagReader para implementar su programa. Use el evento de change en la caja de texto de entrada.

TagReader.h
#pragma once
class TagReader
{
public:
     TagReader();
     ~TagReader();
     void Read(const wstring& in_text, list<wstring>& out_tag);
private:
     ...
};


TagView.h
#pragma once //______________________________________ TagView.h
#include "Resource.h"
#include "TagReader.h"
class TagView : public Win::Dialog
{
public:
     TagView()
     {
     }
     ~TagView()
     {
     }
     ...
};


TagView.cpp
...

void TagView::tbxInput_Change(Win::Event& e)
{
     lbxTags.Items.DeleteAll();
     list<wstring> tagList;
     TagReader tagReader;
     tagReader.Read(tbxInput.Text, tagList);
     list<wstring>::iterator p;
     for (p = tagList.begin(); p != tagList.end(); p++)
     {
          lbxTags.Items.Add(*p);
     }
}


TagViewRun

TagViewRun2

Problem 6
Create a IIS Web application to re-use the TagReader class of the previous problem.
Crear una aplicación Web para IIS llamada TagViewWeb para re-usar la clase TagReader del problema previo.

Step A
Using Wintempla create a IIS Web Application called TagViewWeb. Be sure that the project TagViewWeb and the TagView project are on the same folder.
Use Wintempla para crear una IIS Web Application llamada TagViewWeb. Asegúrese que el proyecto de TagViewWeb y el proyecto de TagView estén en el la misma carpeta.

NewWebApp

Step B
Open the Index.cpp file and use Wintempla to edit the file. Then, insert a multiline textbox called tbxInput and listbox called lbxTags as shown.
Abra el archivo Index.cpp y use Wintempla para editar el archivo. Entonces, inserte una caja de texto multi-línea llamada tbxInput y una listbox llamada lbxTags como se muestra.

TbxInput

LbxTags

Step C
Inserte a Calculate button after the lbxTags listbox as shown.
Insert un botón Calculate después del la listbox lbxTags como se muestra.

BtCalculate

IndexGui

Step D
From Solution Explorer use the context menu to add the TagReader.h file and TagReader.cpp file as shown.
Desde Solution Explorer use el menú de contexto para agregar los archivos TagReader.h yTagReader.cpp como se muestra.

AddFiles

SolutionExplorer

Step E
Open Properties View to check the relative path of the TagReader.h file. Then edit the Index.cpp file as shown, do not forget to include the TagReader.h file using the correct relative path.
Abra Properties View para verificar la ruta relativa al archivo TagReader.h. Entonces edite el archivo Index.cpp como se muestra, no se olvide de incluir el archivo TagReader.h con la ruta relativa correcta.

TagReaderPath

Index.cpp
#include "stdafx.h" //_____________________________________________ Index.cpp
#include "Index.h"
#include "..\..\TagView\TagView\TagReader.h"

void Index::Window_Open(Web::HttpConnector& h)
{
#ifdef _DEBUG
     if (h.FirstTime) tbxInput.Text = L"zero <one> two <three> four five <six seven> eight 9 10 <11>";
#endif
}

void Index::btCalculate_onclick(Web::HttpConnector& h)
{
     lbxTags.Items.DeleteAll();
     TagReader tagReader;
     list<wstring> tagList;
     tagReader.Read(tbxInput.Text, tagList);
     list<wstring>::iterator p;
     for (p = tagList.begin(); p != tagList.end(); p++)
     {
          lbxTags.Items.Add(*p, L"data");
     }
}


TagViewWebRun

© Copyright 2000-2021 Wintempla selo. All Rights Reserved. Jul 22 2021. Home